#!/usr/bin/env python
"""
演示AI评估完整流程
"""
import os
import sys
import django
from django.conf import settings

# 设置Django环境
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'inter_api.settings')
django.setup()

from resume_management.models import Resume
from jobs.models import Job
from students.models import Student
from accounts.models import User
from notifications.models import Notification
from notifications.services import NotificationService
from resume_management.tasks import ai_evaluation_task
import logging
import time

# 配置日志
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

def demo_ai_evaluation_flow():
    """演示AI评估完整流程"""
    print("🎯 AI评估完整流程演示")
    print("=" * 50)
    
    try:
        # 1. 查找测试数据
        print("\n📋 步骤1: 准备测试数据")
        
        student = Student.objects.filter(user__isnull=False).first()
        if not student:
            print("❌ 没有找到关联用户的学生")
            return False
            
        user = student.user
        print(f"✅ 学生用户: {user.username} ({student.name})")
        
        resume = Resume.objects.filter(student=student).first()
        if not resume:
            print("❌ 没有找到该学生的简历")
            return False
            
        print(f"✅ 测试简历: {resume.title}")
        
        job = Job.objects.filter(status='published').first()
        if not job:
            print("❌ 没有找到已发布的岗位")
            return False
            
        print(f"✅ 评估岗位: {job.title}")
        
        # 2. 模拟前端发起AI评估请求
        print("\n🚀 步骤2: 模拟前端发起AI评估")
        
        # 检查评估条件
        if resume.ai_evaluation_status == 'in_progress':
            print("⚠️ 简历正在评估中，重置状态")
            resume.ai_evaluation_status = 'not_started'
            resume.save()
        
        # 更新评估状态
        resume.ai_evaluation_status = 'in_progress'
        resume.ai_evaluation_error = None
        resume.save()
        
        print(f"✅ 评估状态已更新为: {resume.ai_evaluation_status}")
        print("✅ 前端显示: '已经开始评估，稍后在通知中心查看结果'")
        
        # 3. 模拟异步任务执行
        print("\n⚙️ 步骤3: 模拟异步任务执行")
        print("📡 启动异步AI评估任务...")
        
        # 这里我们不真正调用异步任务，而是模拟其行为
        print("🔄 模拟评估过程...")
        time.sleep(2)  # 模拟处理时间
        
        # 4. 模拟评估完成
        print("\n✅ 步骤4: 模拟评估完成")
        
        # 更新简历状态
        resume.ai_evaluation_status = 'completed'
        resume.ai_evaluation_content = """# AI简历评估报告

## 评估概述
您的简历针对「{job_title}」岗位的匹配度评估已完成。

## 匹配度分析
- **整体匹配度**: 85%
- **技能匹配度**: 90%
- **经验匹配度**: 80%

## 简历亮点
1. 技术栈与岗位要求高度匹配
2. 项目经验丰富，具有实际开发能力
3. 学习能力强，持续技术更新

## 改进建议
1. 建议补充更多项目细节和成果数据
2. 可以增加相关行业经验的描述
3. 建议优化简历格式，突出核心技能

## 面试准备建议
1. 准备技术深度问题的回答
2. 整理项目经验的详细案例
3. 了解公司业务和技术栈

祝您求职顺利！""".format(job_title=job.title)
        
        from django.utils import timezone
        resume.ai_evaluation_at = timezone.now()
        resume.save()
        
        print(f"✅ 简历评估状态: {resume.ai_evaluation_status}")
        print(f"✅ 评估完成时间: {resume.ai_evaluation_at}")
        
        # 5. 创建通知
        print("\n📢 步骤5: 创建评估完成通知")
        
        notification = NotificationService.create_ai_evaluation_notification(
            student_user=user,
            resume=resume,
            job=job,
            status='completed'
        )
        
        if notification:
            print(f"✅ 通知创建成功 - ID: {notification.id}")
            print(f"📧 通知标题: {notification.title}")
            print(f"🔔 通知类型: {notification.notification_type}")
            print(f"⭐ 优先级: {notification.priority}")
            print("\n📝 通知内容预览:")
            print("-" * 40)
            print(notification.content[:200] + "...")
            print("-" * 40)
        else:
            print("❌ 通知创建失败")
            return False
        
        # 6. 模拟前端轮询检测
        print("\n🔄 步骤6: 模拟前端轮询检测")
        print("📡 前端每3秒轮询评估状态...")
        print(f"✅ 检测到评估状态变更: {resume.ai_evaluation_status}")
        print("🎉 前端显示通知: 'AI评估完成！点击通知中心查看详细结果'")
        
        # 7. 模拟用户查看通知
        print("\n👀 步骤7: 模拟用户查看通知")
        
        # 获取用户未读通知数量
        unread_count = NotificationService.get_unread_count(user)
        print(f"🔔 用户未读通知数量: {unread_count}")
        
        # 获取最新通知
        latest_notifications = Notification.objects.filter(
            recipient=user,
            notification_type='resume'
        ).order_by('-created_at')[:3]
        
        print("\n📋 最新简历通知:")
        for i, notif in enumerate(latest_notifications, 1):
            status_icon = "🔴" if not notif.is_read else "✅"
            print(f"  {i}. {status_icon} {notif.title} ({notif.created_at.strftime('%H:%M:%S')})")
        
        # 8. 模拟标记已读
        print("\n✅ 步骤8: 模拟用户标记通知已读")
        
        success = NotificationService.mark_as_read(notification.id, user)
        if success:
            print(f"✅ 通知 {notification.id} 已标记为已读")
        
        # 9. 显示完整流程总结
        print("\n🎊 步骤9: 流程完成总结")
        print("=" * 50)
        print("✅ AI评估流程演示完成！")
        print("\n📊 流程统计:")
        print(f"   • 评估简历: {resume.title}")
        print(f"   • 目标岗位: {job.title}")
        print(f"   • 评估状态: {resume.ai_evaluation_status}")
        print(f"   • 通知ID: {notification.id}")
        print(f"   • 用户体验: 从点击评估到收到通知")
        
        print("\n🎯 用户体验亮点:")
        print("   1. 点击AI评估后立即收到确认提示")
        print("   2. 后台异步处理，不阻塞用户操作")
        print("   3. 评估完成后主动推送通知")
        print("   4. 通知中心统一管理所有消息")
        print("   5. 支持查看详细评估报告和下载")
        
        return True
        
    except Exception as e:
        print(f"❌ 演示过程中发生错误: {str(e)}")
        import traceback
        traceback.print_exc()
        return False

def cleanup_demo_data():
    """清理演示数据"""
    print("\n🧹 清理演示数据")
    
    try:
        from django.utils import timezone
        
        # 清理最近创建的测试通知
        demo_notifications = Notification.objects.filter(
            title__icontains='AI评估',
            created_at__gte=timezone.now() - timezone.timedelta(minutes=5)
        )
        
        count = demo_notifications.count()
        if count > 0:
            demo_notifications.delete()
            print(f"✅ 清理了 {count} 条演示通知")
        else:
            print("✅ 没有需要清理的演示数据")
        
        return True
        
    except Exception as e:
        print(f"❌ 清理过程中发生错误: {str(e)}")
        return False

def main():
    """主函数"""
    print("🎬 AI评估通知功能演示")
    print("这个演示将展示完整的AI评估流程，包括:")
    print("• 前端发起评估请求")
    print("• 后台异步处理")
    print("• 通知创建和推送")
    print("• 用户查看和管理通知")
    
    input("\n按回车键开始演示...")
    
    # 运行演示
    if demo_ai_evaluation_flow():
        print("\n🎉 演示成功完成！")
        
        # 询问是否清理数据
        cleanup = input("\n是否清理演示数据？(y/n): ").lower().strip()
        if cleanup == 'y':
            cleanup_demo_data()
    else:
        print("\n❌ 演示失败")

if __name__ == '__main__':
    main()
